part of '../basic.dart';

/// 对于字高、字间距、大小等经常需要微调的属性
/// 可以根据某个基础值进行delta微调为新的TextStyle
///
/// 其中字重[fontWeight]、颜色[color]可以直接使用[copyWith]，无需微调
/// 对于微调，通常有绝对值(offset)或相对值(ratio，即倍数)的方法
///
/// 如此一来，各个参数都可以在某个基础值上面修改
extension FontTune on TextStyle {
  TextStyle delta({
    double? letterSpacing,
    double? height,
    double? fontSize,
  }) {
    // 这里的this.xxx ?? 0一定要用括号括起来，否则好像后面的同名变量会直接被赋值为0，导致这个方法无效
    return copyWith(
      letterSpacing: letterSpacing != null
          ? (this.letterSpacing ?? 0) + letterSpacing
          : this.letterSpacing,
      height: height != null ? (this.height ?? 0) + height : this.height,
      fontSize:
          fontSize != null ? (this.fontSize ?? 0) + fontSize : this.fontSize,
    );
  }
}
